home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / midas060 / src / lang.inc < prev    next >
Encoding:
Text File  |  1997-01-16  |  8.8 KB  |  391 lines

  1. ;*    LANG.INC
  2. ;*
  3. ;* Language-dependent macros and conditional assembly
  4. ;*
  5. ;* $Id: lang.inc,v 1.4 1997/01/16 18:41:59 pekangas Exp $
  6. ;*
  7. ;* Copyright 1996,1997 Housemarque Inc.
  8. ;*
  9. ;* This file is part of the MIDAS Sound System, and may only be
  10. ;* used, modified and distributed under the terms of the MIDAS
  11. ;* Sound System license, LICENSE.TXT. By continuing to use,
  12. ;* modify or distribute this file you indicate that you have
  13. ;* read the license and understand and accept it fully.
  14. ;*
  15.  
  16.  
  17. IFDEF __BPREAL__
  18.         ; Borland Pascal 7 in Real Mode
  19.  
  20.     LANG EQU PASCAL
  21.  
  22.     MODEL    TPASCAL
  23.  
  24.     MACRO IDATASEG
  25.         CODESEG
  26.     ENDM
  27.  
  28.         __PASCAL__ = 1
  29.         __REALMODE__ = 1
  30.         __16__ = 1
  31.  
  32. ELSE
  33. IFDEF __BPPROT__
  34.         ; Borland Pascal 7 in Protected Mode
  35.  
  36.         LANG EQU PASCAL
  37.  
  38.         MODEL   TPASCAL
  39.  
  40.         MACRO IDATASEG
  41.                 CODESEG
  42.         ENDM
  43.  
  44.         __PASCAL__ = 1
  45.         __PROTMODE__ = 1
  46.         __16__ = 1
  47.         __DPMI__ = 1
  48.         __IRQPASSUP__ = 1
  49.         NOEMS = 1
  50. ELSE
  51. IFDEF __BC16__
  52.         ; Borland C in 16-bit Real Mode
  53.  
  54.         ; a hack to force 16-byte segment alignment:
  55.  
  56.         MACRO MKSEG __name_, __text_
  57.                 SEGMENT &__name_&__text_ PARA PUBLIC USE16 "CODE"
  58.                 ASSUME  cs:&__name_&__text_, ds:@data
  59.         ENDM
  60.         MKSEG %@FileName, _TEXT
  61.         ENDS
  62.  
  63.     MODEL    LARGE,C
  64.  
  65.     LANG EQU C
  66.  
  67.     MACRO IDATASEG
  68.         DATASEG
  69.     ENDM
  70.  
  71.         __C__ = 1
  72.         __REALMODE__ = 1
  73.         __16__ = 1
  74. ELSE
  75. IFDEF __WC16__
  76.         ; Watcom C in 16-bit Real Mode
  77.  
  78.         ; a hack to force 16-byte segment alignment:
  79.  
  80.         MACRO MKSEG __name_, __text_
  81.                 SEGMENT &__name_&__text_ PARA PUBLIC USE16 "CODE"
  82.                 ASSUME  cs:&__name_&__text_, ds:@data
  83.         ENDM
  84.         MKSEG %@FileName, _TEXT
  85.         ENDS
  86.  
  87.     MODEL    LARGE,C
  88.  
  89.     LANG EQU C
  90.  
  91.     MACRO IDATASEG
  92.         DATASEG
  93.     ENDM
  94.  
  95.         __C__ = 1
  96.         __REALMODE__ = 1
  97.         __16__ = 1
  98. ELSE
  99. IFDEF __ASM16__
  100.         ; Pure assembler in 16-bit real mode
  101.  
  102.         ; Assembler version uses MODEL C, and defines C as the language.
  103.  
  104.         ; a hack to force 16-byte segment alignment:
  105.  
  106.         MACRO MKSEG __name_, __text_
  107.                 SEGMENT &__name_&__text_ PARA PUBLIC USE16 "CODE"
  108.                 ASSUME  cs:&__name_&__text_, ds:@data
  109.         ENDM
  110.         MKSEG %@FileName, _TEXT
  111.         ENDS
  112.  
  113.     MODEL    LARGE,C
  114.  
  115.     LANG EQU C
  116.  
  117.     MACRO IDATASEG
  118.         DATASEG
  119.     ENDM
  120.  
  121.         __ASM__ = 1
  122.         __REALMODE__ = 1
  123.         __16__ = 1
  124. ELSE
  125. IFDEF __WC32__
  126.         ; Watcom C in 32-bit Protected Mode
  127.  
  128.         ; a hack to force 16-byte segment alignment:
  129.  
  130.         SEGMENT _TEXT PARA PUBLIC USE32 "CODE"
  131.         ENDS
  132.         SEGMENT _DATA PARA PUBLIC USE32 "DATA"
  133.         ENDS
  134.  
  135.         MODEL   FLAT,C
  136.  
  137.     LANG EQU C
  138.  
  139.     MACRO IDATASEG
  140.         DATASEG
  141.     ENDM
  142.  
  143.         __C__ = 1
  144.         __32__ = 1
  145.         __DPMI__ = 1
  146.         __PROTMODE__ = 1
  147.         __IRQPASSUP__ = 1
  148.         NOEMS = 1
  149. ELSE
  150. IFDEF __VC32__
  151.         ; Visual C 32-bit mode
  152.  
  153.         ; a hack to force 16-byte segment alignment:
  154.  
  155.         SEGMENT _TEXT PARA PUBLIC USE32 "CODE"
  156.         ENDS
  157.         SEGMENT _DATA PARA PUBLIC USE32 "DATA"
  158.         ENDS
  159.  
  160.         MODEL   FLAT,C
  161.  
  162.     LANG EQU C
  163.  
  164.     MACRO IDATASEG
  165.         DATASEG
  166.     ENDM
  167.  
  168.         __C__ = 1
  169.         __32__ = 1
  170.         __DPMI__ = 1
  171.         __PROTMODE__ = 1
  172.         __IRQPASSUP__ = 1
  173.         NOEMS = 1
  174. ELSE
  175.         ERR Destination language not defined
  176. ENDIF
  177. ENDIF
  178. ENDIF
  179. ENDIF
  180. ENDIF
  181. ENDIF
  182. ENDIF
  183.  
  184.  
  185.  
  186.  
  187. ;/***************************************************************************\
  188. ;*      Memory model dependent macros and equates:
  189. ;\***************************************************************************/
  190.  
  191.  
  192. IFDEF __32__
  193.         ; 32-bit flat model
  194.  
  195.         ; Prerred register size equates:
  196.         _ax             EQU     eax
  197.         _bx             EQU     ebx
  198.         _cx             EQU     ecx
  199.         _dx             EQU     edx
  200.         _si             EQU     esi
  201.         _di             EQU     edi
  202.         _bp             EQU     ebp
  203.         _sp             EQU     esp
  204.  
  205.         ; Default pointer combinations:
  206.         _essi           EQU     esi
  207.         _esdi           EQU     edi
  208.         _esbx           EQU     ebx
  209.         _esbp           EQU     ebp
  210.         _fssi           EQU     esi
  211.         _fsdi           EQU     edi
  212.         _fsbx           EQU     ebx
  213.         _fsbp           EQU     ebp
  214.         _gssi           EQU     esi
  215.         _gsdi           EQU     edi
  216.         _gsbx           EQU     ebx
  217.         _gsbp           EQU     ebp
  218.  
  219.         ; Data types
  220.         _int            EQU     dword
  221.         INTSIZE = 4
  222.         _long           EQU     dword
  223.         LONGSIZE = 4
  224.         _funct          EQU     near
  225.         _defptr         EQU     near
  226.         _ptr            EQU     dword
  227.         PTRSIZE = 4
  228.         _farptr         EQU     pword
  229.         FARPTRSIZE = 6
  230.         _nearptr        EQU     dword
  231.         NEARPTRSIZE = 4
  232.  
  233.         MACRO   D_int  name
  234.                 &name   DD      ?
  235.         ENDM
  236.  
  237.         MACRO   D_long  name
  238.                 &name   DD      ?
  239.         ENDM
  240.  
  241.         MACRO   D_ptr   name
  242.                 &name   DD      ?
  243.         ENDM
  244.  
  245.         MACRO   D_farptr name
  246.                 &name   DP      ?
  247.         ENDM
  248.  
  249.         MACRO   D_nearptr name
  250.                 &name   DD      ?
  251.         ENDM
  252.  
  253.         ptr_to          EQU     offset
  254.         farptr_to       EQU     far ptr
  255.         nearptr_to      EQU     offset
  256.  
  257.         ; LOADPTR - loads a default pointer type
  258.         MACRO   LOADPTR         segreg, indexreg, pointer
  259.         mov     indexreg, pointer
  260.         ENDM
  261.  
  262.         ; COPYPTR - copies a default pointer type variable (destroys eax)
  263.         MACRO   COPYPTR         destptr, sourceptr
  264.         mov     eax,sourceptr
  265.         mov     destptr,eax
  266.         ENDM
  267.  
  268.         ; PUSHSEGREG - pushes a segment register in 16-bit modes
  269.         MACRO   PUSHSEGREG      segreg
  270.         ENDM
  271.  
  272.         ; POPSEGREG - pops a segment register in 16-bit modes
  273.         MACRO   POPSEGREG       segreg
  274.         ENDM
  275. ENDIF
  276.  
  277. IFDEF __16__
  278.         ; All 16-bit models
  279.  
  280.         ; Prerred register size equates:
  281.         _ax             EQU     ax
  282.         _bx             EQU     bx
  283.         _cx             EQU     cx
  284.         _dx             EQU     dx
  285.         _si             EQU     si
  286.         _di             EQU     di
  287.         _bp             EQU     bp
  288.         _sp             EQU     sp
  289.  
  290.         ; Default pointer combinations:
  291.         _essi           EQU     es:si
  292.         _esdi           EQU     es:di
  293.         _esbx           EQU     es:bx
  294.         _esbp           EQU     es:bp
  295.         _fssi           EQU     fs:si
  296.         _fsdi           EQU     fs:di
  297.         _fsbx           EQU     fs:bx
  298.         _fsbp           EQU     fs:bp
  299.         _gssi           EQU     gs:si
  300.         _gsdi           EQU     gs:di
  301.         _gsbx           EQU     gs:bx
  302.         _gsbp           EQU     gs:bp
  303.  
  304.         ; Data types
  305.         _int            EQU     word
  306.         INTSIZE = 2
  307.         _long           EQU     dword
  308.         LONGSIZE = 4
  309.         _funct          EQU     far
  310.         _defptr         EQU     far
  311.         _ptr            EQU     dword
  312.         PTRSIZE = 4
  313.         _farptr         EQU     dword
  314.         FARPTRSIZE = 4
  315.         _nearptr        EQU     word
  316.         NEARPTRSIZE = 2
  317.  
  318.         MACRO   D_int  name
  319.                 &name   DW      ?
  320.         ENDM
  321.  
  322.         MACRO   D_long name
  323.                 &name   DD      ?
  324.         ENDM
  325.  
  326.         MACRO   D_ptr   name
  327.                 &name   DD      ?
  328.         ENDM
  329.  
  330.         MACRO   D_farptr name
  331.                 &name   DD      ?
  332.         ENDM
  333.  
  334.         MACRO   D_nearptr name
  335.                 &name   DW      ?
  336.         ENDM
  337.  
  338.         ptr_to          EQU     far ptr
  339.         farptr_to       EQU     far ptr
  340.         nearptr_to      EQU     offset
  341.  
  342.         ; LOADPTR - loads a default pointer type
  343.         MACRO   LOADPTR         segreg, indexreg, pointer
  344.         IFIDNI  <&segreg>,<ds>
  345.                 lds     indexreg,pointer
  346.         ELSE
  347.         IFIDNI  <&segreg>,<es>
  348.                 les     indexreg,pointer
  349.         ELSE
  350.         IFIDNI  <&segreg>,<fs>
  351.                 lfs     indexreg,pointer
  352.         ELSE
  353.         IFIDNI  <&segreg>,<gs>
  354.                 lgs     indexreg,pointer
  355.         ENDIF
  356.         ENDIF
  357.         ENDIF
  358.         ENDIF
  359.         ENDM
  360.  
  361.         ; COPYPTR - copies a default pointer type variable (destroys eax)
  362.         MACRO   COPYPTR         destptr, sourceptr
  363.         mov     eax,sourceptr
  364.         mov     destptr,eax
  365.         ENDM
  366.  
  367.         ; PUSHSEGREG - pushes a segment register in 16-bit modes
  368.         MACRO   PUSHSEGREG      segreg
  369.         push    segreg
  370.         ENDM
  371.  
  372.         ; POPSEGREG - pops a segment register in 16-bit modes
  373.         MACRO   POPSEGREG       segreg
  374.         pop     segreg
  375.         ENDM
  376. ENDIF
  377.  
  378.  
  379. ;* $Log: lang.inc,v $
  380. ;* Revision 1.4  1997/01/16 18:41:59  pekangas
  381. ;* Changed copyright messages to Housemarque
  382. ;*
  383. ;* Revision 1.3  1996/07/16 20:20:50  pekangas
  384. ;* Added support for Visual C
  385. ;*
  386. ;* Revision 1.2  1996/05/30 22:38:46  pekangas
  387. ;* no changes?
  388. ;*
  389. ;* Revision 1.1  1996/05/22 20:49:33  pekangas
  390. ;* Initial revision
  391. ;*